<?php
/**
 * 角色处理类
 *
 * @author Mo yi <root@imoi.cn>
 * @link   http://www.imoi.cn
 * @copyright Copyright &copy; 2010-2012 DuoLam Software LLC
 * @license http://www.imoi.cn/license/
 * @version $Id: dpAuthRole.php 1 2012-04-22 14:41:54Z Mo.yi $
 * @package db
 * @since 1.0
 */

class dpAuthRole extends dpComponent
{
	/**
	 * 数据库连接句柄
	 */
	protected $db;

	/**
	 * 行为句柄
	 */
	protected $behavior;

	/**
	 * 当前添加角色的id
	 */
	private $_roleId;

	/**
	 * 构造方法
	 * @param object dpAuth实例
	 * @return object 返回自己类实例
	 */
	public function __construct(dpAuth $auth)
	{
		$this->db = $auth->getDb();
		$this->behavior = new dpAuthBehavior($this);
	}

	/**
	 * 获取数据库连接
	 * @return object 数据库连接句柄
	 */
	public function getDb()
	{
		return $this->db;
	}

	/**
	 * 获取行为实例
	 */
	public function getBehavior()
	{
		return $this->behavior;
	}

	/**
	 * 建立角色
	 * @param string $roleName 角色名
	 * @param int    $fatherId 角色父ID，默认无父角色
	 * @param boolean $enabled 是否启动角色，默认启用
	 * @param string $description 角色描述，默认为空
	 * @return object 返回行为实例
	 */
	public function createRole($roleName, $fatherId = 0, $enabled = true, $description = null)
	{
		if (empty($roleName)) return false;

		$roleData = $this->db->select('rid')
					->from('{role}')
					->where('role_name=:role',array(':role'=>$roleName))
					->find();

		if ($roleData) dpException::error('角色名不允许重复！');

		$data = array
		(
			'role_name'       => $roleName,
			'father_role_id'  => $fatherId,
			'is_role_enabled' => $enabled ? 1 : 0,
			'description'     => $description,
		);

		$this->_roleId = $this->db->insert('{role}', $data);

		$this->behavior->setRoleId($this->_roleId);

		return $this->behavior;

	}

	/**
	 * 移除角色
	 * @param string $roleName 角色名
	 * @param boolean || int
	 */
	public function removeRole($roleName)
	{
		$rid = $this->db->select('rid')
			   ->from('{role}')
			   ->where('roleName=:role',array(':role'=>$roleName))
			   ->find();

		if ($rid) return false;

		$this->db->delete('{role}','rid='.$rid);
		return $rid;
	}

	/**
	 * 移除所有角色
	 * @param string $table 表名
	 * @param string $pk    主键名
	 * @param int    $id    主键ID值
	 */
	public function removeRoles($table, $pk, $id)
	{
		$data = $this->db->select('rid')
				->from($table)
				->where($pk .'=' .(int)$id)
				->finds();

		foreach ($data as $val) $rid[] = $val['rid'];
		
		$this->db->delete('{role}', array('in', 'rid', $rid));
		return $rid;
	}

	public function getRoleId()
	{
		return $this->_roleId;
	}


}
?>